
package com.hlkj.pay.infrastructure.model.merchant;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

import org.springframework.util.StringUtils;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.hlkj.framework.common.util.json.JsonUtils;
import com.hlkj.framework.mybatis.core.dataobject.BaseDO;
import com.hlkj.pay.dto.merchant.CashierConfigDto;
import com.hlkj.pay.dto.merchant.RouterConfigDto;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;

/**
 * 平台应用信息表
 * 
 * @TableName t_merchant_apps
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = true)
@TableName("t_merchant_app")
public class MerchantAppDO extends BaseDO {

    /**
     * 是否禁用：0-否；1-是；
     */
    @Schema(description = "是否禁用：0-否；1-是；")
    private Integer status;

    /**
     * 所属平台，1=运营平台，2=机构，3=商户
     */
    @NotNull(message = "[所属平台，1=运营平台，2=机构，3=商户]不能为空")
    @Schema(description = "所属平台，1=运营平台，2=机构，3=商户")
    private Integer sysType;

    /**
     * 商户编码
     */
    @NotBlank(message = "[商户编码]不能为空")
    @Size(max = 64, message = "编码长度不能超过64")
    @Schema(description = "商户编码")
    private String sn;

    /**
     * 应用appid
     */
    @NotBlank(message = "[应用appid]不能为空")
    @Size(max = 64, message = "编码长度不能超过64")
    @Schema(description = "应用appid")
    private String appId;

    /**
     * 应用名称
     */
    @NotBlank(message = "[应用名称]不能为空")
    @Size(max = 64, message = "编码长度不能超过64")
    @Schema(description = "应用名称")
    private String appName;

    /**
     * 是否默认应用
     */
    @NotNull(message = "[是否默认应用]不能为空")
    @Schema(description = "是否默认应用")
    private Integer defaultAppFlag;

    /**
     * MD5秘钥
     */
    @NotBlank(message = "[MD5秘钥]不能为空")
    @Size(max = 64, message = "编码长度不能超过64")
    @Schema(description = "MD5秘钥")
    private String md5Key;

    /**
     * 商户公钥
     */
    @Schema(description = "商户公钥")
    private String publicKey;

    /**
     * 商户私钥
     */
    @Schema(description = "商户私钥")
    private String privateKey;

    /**
     * 通道已选的支付方式
     */
    @Schema(description = "轮询配置")
    private String routerConfigJson;

    /**
     * 通道已选的支付方式
     */
    @Schema(description = "收银配置")
    private String cashierConfigJson;
    /**
     * ip配置
     */
    @Schema(description = "ip配置")
    private String ipConfig;

    /**
     * 通道已选的支付方式
     */
    @Schema(description = "轮询配置")
    @TableField(exist = false)
    private RouterConfigDto routerConfigDto;

    public RouterConfigDto getRouterConfigDto() {
        if (routerConfigDto != null) {
            return routerConfigDto;
        }
        if (StringUtils.hasText(routerConfigJson)) {
            setRouterConfigDto(JsonUtils.parseObject(routerConfigJson, RouterConfigDto.class));
        }
        if (routerConfigDto != null) {
            routerConfigDto.setAppId(appId);
        }
        return routerConfigDto;
    }

    @Schema(description = "收银配置")
    @TableField(exist = false)
    private CashierConfigDto cashierConfigDto;

    public CashierConfigDto getCashierConfigDto() {
        if (cashierConfigDto != null) {
            return cashierConfigDto;
        }
        if (StringUtils.hasText(cashierConfigJson)) {
            setCashierConfigDto(JsonUtils.parseObject(cashierConfigJson, CashierConfigDto.class));
        }
        return cashierConfigDto;
    }

}
